//package com.tl.satoken.utils;
//
//import io.jsonwebtoken.Claims;
//import io.jsonwebtoken.Jwts;
//import io.jsonwebtoken.SignatureAlgorithm;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//
//import java.util.Date;
//import java.util.Map;
//import java.util.function.Function;
//@Component
//public class JwtUtils {
//
//
//
//    private static final Logger logger = LoggerFactory.getLogger(JwtUtil.class);
//
//    @Value("${jwt.secret}")
//    private String secret;
//
//    @Value("${jwt.expiration}")
//    private Long expiration;
//
//    // 使用静态密钥（建议在生产环境中使用更安全的密钥管理方式）
//    private static String key = "T8gGtY57b9cFz3Kf6A6E3mBc4xVj2oRpMqJ5PsZ76Lw";
//
//    /**
//     * 生成JWT令牌
//     * @param claims JWT第二部分负载 payload 中存储的内容
//     * @return
//     */
//    public static String generateJwt(Map<String, Object> claims) {
//        String jwt = Jwts.builder()
//                .addClaims(claims)
//                .signWith(SignatureAlgorithm.HS256, key)
//                .compact(); // 移除 setExpiration，Token 永不过期
//        return jwt;
//    }
//
//    /**
//     * 解析JWT令牌
//     * @param jwt JWT令牌
//     * @return JWT第二部分负载 payload 中存储的内容
//     */
//    public static Claims parseJWT(String jwt) {
//        Claims claims = Jwts.parser()
//                .setSigningKey(key)
//                .parseClaimsJws(jwt)
//                .getBody();
//        return claims;
//    }
//
//    public static String extractUsername(String token) {
//        try {
//            return extractClaim(token, Claims::getSubject);
//        } catch (Exception e) {
//            logger.error("Error extracting username from token: {}", e.getMessage());
//            return null;
//        }
//    }
//
//    public static Date extractExpiration(String token) {
//        try {
//            return extractClaim(token, Claims::getExpiration);
//        } catch (Exception e) {
//            logger.error("Error extracting expiration from token: {}", e.getMessage());
//            return null;
//        }
//    }
//
//    public static <T> T extractClaim(String token, Function<Claims, T> claimsResolver) {
//        try {
//            final Claims claims = extractAllClaims(token);
//            return claimsResolver.apply(claims);
//        } catch (Exception e) {
//            logger.error("Error extracting claim from token: {}", e.getMessage());
//            return null;
//        }
//    }
//
//    public static Claims extractAllClaims(String token) {
//        try {
//            return Jwts.parserBuilder()
//                    .setSigningKey(getSigningKey())
//                    .build()
//                    .parseClaimsJws(token)
//                    .getBody();
//        } catch (Exception e) {
//            logger.error("Error extracting all claims from token: {}", e.getMessage(), e);
//            throw e;
//        }
//    }
//}